package Javaa.Base.Thread;
//create and example of Asynchronous usage in Java class funcitonality
// add callbacks to indicate task completion

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class AsynchronousExample {
    // 线程池（管理多线程）
    private static final ExecutorService executor = Executors.newFixedThreadPool(3);

    // 异步下载方法：发起任务后立即返回，结果通过回调告知
    public static void downloadFile(String fileName, Callback callback) {
        executor.submit(() -> {
            System.out.println("开始下载：" + fileName);
            // 模拟下载耗时（2秒）
            try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); }
            // 下载完成，回调通知结果
            callback.onComplete(fileName + " 下载成功！");
        });
    }

    // 回调接口：接收异步任务结果
    public interface Callback {
        void onComplete(String result);
    }

    public static void main(String[] args) {
        // 发起3个异步下载任务（主线程不等待）
        downloadFile("文件A", result -> System.out.println("回调结果：" + result));
        downloadFile("文件B", result -> System.out.println("回调结果：" + result));
        downloadFile("文件C", result -> System.out.println("回调结果：" + result));

        // 主线程继续做其他事（非阻塞）
        System.out.println("主线程：发起下载后，我去处理其他任务了...");

        executor.shutdown();
    }
}